/**
 * 编程获取两个指定字符串中的最大相同子串。
 *
 *  如： s1="asdafghjka", s2="aaasdfg" 他们的最大子串为"asd"
 *
 *  提示： 将短的那个串进行长度依次递减的子串与较长的串比较。
 */
public class Task2Test {
    public static void main(String[] args) {
        String s1="asdafghjka";
        String s2="aaasdfg";
        //用成员方法比较长度较长的字符串和较短的
        String shortString = Task2.shorterString(s1, s2);
        String longString = Task2.longerString(s1, s2);
        //用StringBuilder来构造相同的字符串
        StringBuilder sb = new StringBuilder();
        int len = 0;
        //用外循环遍历短数组的每一个字符
        for (int i=0; i<shortString.length(); i++){
            //找到长数组中对应字符的位置
            char start = shortString.charAt(i);
            int startIndex = longString.indexOf(start);
            //用内循环判断两个字符串中这个位置的下一个字符是否相同
            for (int j=1; j<shortString.length()-i; j++) {
                //如果相同则继续循环，记录长度
                if (longString.charAt(startIndex+j) == shortString.charAt(i + j)) {
                    int sublength = longString.substring(startIndex, startIndex + j + 1).length();
                    if (sublength>len){
                        sb.replace(0, sb.length(), longString.substring(startIndex, startIndex + j + 1));
                        len = sublength;
                    }
                    //如果出现多个长度相同的共同字符串，则全部打印下来
                    else if (sublength==len){
                        sb.append("和");
                        sb.append(longString.substring(startIndex, startIndex + j + 1));
                    }
                }
                //如果下个字符不同则跳出内循环
                else break;
            }
        }
        System.out.println(sb);
    }
}
